package br.com.saeng2D.formulario.caixa_forca_d_t;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import br.com.saeng2D.formulario.caixa.ContainerAnimado;
import br.com.saeng2D.formulario.caixa.Dialogo;
import br.com.saeng2D.formulario.caixa.GrupoContainerAnimado;
import br.com.saeng2D.objeto.forca.ForcaDistribuida;
import br.com.saeng2D.objeto.forca.ForcaTriangular;
import br.com.saeng2D.objeto.forca_d.ForcaDinamica;
import br.com.saeng2D.objeto.forca_d.IncluirForcaDinamica;
import br.com.saeng2D.objeto.linha.Linha;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.util.Util;

//Caixa de Diálogo selecionamento do tipo força distribuída
public class DialogoForcaDistribuidaTriangular extends Dialogo {
	private static final long serialVersionUID = 1L;
	private ControleContainerAnimadoForcaD controleContainerAnimadoD;
	private ControleContainerAnimadoForcaT controleContainerAnimadoT;
	private Linha linha;
	
	public DialogoForcaDistribuidaTriangular(Superficie superficie, Linha linha) {
		super(superficie);
		this.linha = linha;
		montarLayout2();
		registrarEvento2();
		setVisible(true);
	}

	private void montarLayout2() {
		GrupoContainerAnimado grupo = new GrupoContainerAnimado();
		
		ForcaDistribuida forcaDistribuida = new ForcaDistribuida(80, 50);
		forcaDistribuida.setVariavelForca("0" + Util.getString("label_simbolo_grau"));
		ContainerAnimado containerAnimadoD = new ContainerAnimado(forcaDistribuida);
		controleContainerAnimadoD = new ControleContainerAnimadoForcaD(Util.getString("label_forca_distribuida"), containerAnimadoD, this, 10, 10, 250, 200);
		panelCentral.add(controleContainerAnimadoD);
		grupo.adicionarContainerAnimado(containerAnimadoD);
		
		ForcaTriangular forcaTriangular = new ForcaTriangular(80, 50);
		forcaTriangular.setVariavelForca("0" + Util.getString("label_simbolo_grau"));
		ContainerAnimado containerAnimadoT = new ContainerAnimado(forcaTriangular);
		controleContainerAnimadoT = new ControleContainerAnimadoForcaT(Util.getString("label_forca_triangular"), containerAnimadoT, this, 270, 10, 250, 200);
		panelCentral.add(controleContainerAnimadoT);
		grupo.adicionarContainerAnimado(containerAnimadoT);
		
		setSize(540, 290);
		Util.centralizar(this, superficie.getFormularioPrincipal());
	}
	
	public void registrarEvento2() {
		buttonAdicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				adicionarForcaNaSuperficie();
			}
		});
	}
	
	public void adicionarNaSuperficie() {
		adicionarForcaNaSuperficie();
	}
	
	private void adicionarForcaNaSuperficie() {
		boolean adicionado = false;
		if(controleContainerAnimadoD.getContainerAnimado().isSelecionado()) {
			try {
//				ForcaDistribuida forcaDistribuida = (ForcaDistribuida) controleContainerAnimadoD.getContainerAnimado().getAbstratoAnimado().prototipo();
//				String stringValorNewton = controleContainerAnimadoD.getStringValorNewton();
//				forcaDistribuida.setStringValorNewton(stringValorNewton);
				//----------------------------------------------------------------
				IncluirForcaDinamica forcaDistr = new IncluirForcaDinamica();
				ForcaDinamica forcaDinamica = forcaDistr.incluirForcaDistribuida("cor_forca_distribuida", "cor_variavel_forca_distr_", linha, controleContainerAnimadoD.get90GrausAuxiliar(), controleContainerAnimadoD.getVariavelForca());
				forcaDinamica.setDescricao("forcaDinamicaDistribuida");
				
//				ForcaDinamica forcaDinamica = new ForcaDinamica("cor_forca_distribuida");
//				forcaDinamica.setLinha(linha);
//				
//				int MULTIPLICADOR = 1;
//				final int COMPRIMENTO_LINHA_P = (int) linha.getComprimento();
//				final int PREF_DISTANCIA_SETA = Util.getInt("pref_distancia_entre_setaD");
//				int QTD_RETAS_ADICIONAR = COMPRIMENTO_LINHA_P / PREF_DISTANCIA_SETA;
//				if(COMPRIMENTO_LINHA_P % PREF_DISTANCIA_SETA != 0) {
//					QTD_RETAS_ADICIONAR++;
//				}
//				final int DISTANCIA_REAL_ENTRE_SETAS = COMPRIMENTO_LINHA_P / QTD_RETAS_ADICIONAR; 
//				Vetor vetor = linha.criarVetor();
//				Vetor teste = linha.criarVetor();
//				final int COMPRIMENTO_SETA = Util.getInt("comprimento_seta_dinamica"); 
//				vetor.alterarTamanho(COMPRIMENTO_SETA);
//				teste.alterarTamanho(Util.getInt("tamanho_padrao_forca_centralizada"));
//				if(linha.ehVertical() || linha.ehHorizontal()) {
//					if(linha.getPonto2().yMenorQue(linha.getPonto1())) {
//						MULTIPLICADOR = -1;
//					} else if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//						MULTIPLICADOR = -1;
//					}
//				} else {
//					if(linha.getPonto1().yMenorQue(linha.getPonto2())) {
//						if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//							MULTIPLICADOR = -1;
//						}
//					} else {
//						if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//							MULTIPLICADOR = -1;
//						}
//					}
//				}
//				
//				final int GRAUS = controleContainerAnimadoD.get90GrausAuxiliar() * MULTIPLICADOR;
//				vetor.rotacionar(GRAUS);
//				teste.rotacionar(GRAUS);
//				
//				int v_x = (int) vetor.x;
//				int v_y = (int) vetor.y * -1;				
//				int p_x1 = (int) (linha.getPonto1().getX() + v_x);
//				int p_y1 = (int) (linha.getPonto1().getY() + v_y);
//				int p_x2 = (int) (linha.getPonto2().getX() + v_x);
//				int p_y2 = (int) (linha.getPonto2().getY() + v_y);
//
//				Reta retaParalela = new Reta(p_x1, p_y1, p_x2, p_y2);
//				forcaDinamica.adicionarFilho(retaParalela);
//				
//				String stringVariavForca = controleContainerAnimadoD.getVariavelForca();
//				Linha linhaVariavelForca = new Linha(new Ponto(p_x1, p_y1), new Ponto(p_x2, p_y2));
//				Vetor vetorVariavelForca = linhaVariavelForca.criarVetor();
//				vetorVariavelForca.alterarTamanho((int) (linhaVariavelForca.getComprimento() / 2));
//				Ponto pontoVariavelForca = new Ponto((int)(linhaVariavelForca.getPonto1().getX() + vetorVariavelForca.x), (int)(linhaVariavelForca.getPonto1().getY() + vetorVariavelForca.y * -1 + 15));
//				
//				Reta reta = new Reta(linha.getPonto1().getX(), linha.getPonto1().getY(), p_x1, p_y1);
//				forcaDinamica.adicionarFilho(reta);
//				Vetor v = reta.criarVetor();
//				v.alterarTamanho(8);
//				v.rotacionar(40);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto1(), v));
//				v.rotacionar(-80);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto1(), v));
//				
//				reta = new Reta(linha.getPonto2().getX(), linha.getPonto2().getY(), p_x2, p_y2);
//				forcaDinamica.adicionarFilho(reta);
//				v = reta.criarVetor();
//				v.alterarTamanho(8);
//				v.rotacionar(40);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto2(), v));
//				v.rotacionar(-80);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto2(), v));
//
//				Linha linhaParalela = new Linha(new Ponto(p_x1, p_y1), new Ponto(p_x2, p_y2));
//				
//				for(int i=1; i<QTD_RETAS_ADICIONAR; i++) {
//					int tamanho = i * DISTANCIA_REAL_ENTRE_SETAS; 
//					Vetor vetorLinha = linha.criarVetor();
//					vetorLinha.alterarTamanho(tamanho);
//					vetorLinha.y *= -1;				
//
//					Vetor vetorParalelo = linhaParalela.criarVetor();
//					vetorParalelo.alterarTamanho(tamanho);
//					vetorParalelo.y *= -1;				
//
//					reta = new Reta((int)(linha.getPonto1().getX() + vetorLinha.x), 
//							  		(int)(linha.getPonto1().getY() + vetorLinha.y), 
//							  		(int)(linhaParalela.getPonto1().getX() + vetorParalelo.x), 
//							  		(int)(linhaParalela.getPonto1().getY() + vetorParalelo.y)); 
//					forcaDinamica.adicionarFilho(reta);
//					v = reta.criarVetor();
//					v.alterarTamanho(8);
//					v.rotacionar(40);
//					forcaDinamica.adicionarFilho(new Reta(	(int)(linha.getPonto1().getX() + vetorLinha.x),
//															(int)(linha.getPonto1().getY() + vetorLinha.y), v));
//					v.rotacionar(-80);
//					forcaDinamica.adicionarFilho(new Reta(	(int)(linha.getPonto1().getX() + vetorLinha.x),
//															(int)(linha.getPonto1().getY() + vetorLinha.y), v));
//				}
//				
//				vetor = linha.criarVetor();
//				int m = (int) (linha.getComprimento() / 2);
//				vetor.alterarTamanho(m);
//				Ponto ponto = new Ponto((int)(linha.getPonto1().getX() + vetor.x), (int)(linha.getPonto1().getY() + vetor.y * -1));
//				ponto.setPreenchido(true);
//				ponto.setCorFundo(Util.getCor("cor_forca_distribuida"));
//				linha.setPontoCentral(ponto);
//				
//				forcaDinamica.setVariavelForca(stringVariavForca);
//				forcaDinamica.setPontoVariavelForca(pontoVariavelForca);
//				forcaDinamica.setCorVariavelForca(Util.getCor("cor_variavel_forca_distr_"));
//				
//				ForcaCentralizada2 forcaC = new ForcaCentralizada2(teste, ponto.getX(), ponto.getY());
//				forcaC.setVariavelForca("" + (int)((linha.getComprimento() / Constantes.ESCALA_REAL) * Integer.parseInt(stringVariavForca)));
//				forcaC.setCorFundo(Util.getCor("cor_forca_distribuida"));
//				
//				linha.setForcaCentralizada2(forcaC);
				
				superficie.adicionarObjeto(forcaDinamica);
				adicionado = true;
			} catch(Exception e) {
				Util.mensagem(this, Util.getString("msg_nao_selecionado_forca_variavel"));
				//JOptionPane.showMessageDialog(null, e.getMessage());
				return;
			}
		}
		if(controleContainerAnimadoT.getContainerAnimado().isSelecionado()) {
			try{
//				ForcaTriangular forcaTriangular = (ForcaTriangular) controleContainerAnimadoT.getContainerAnimado().getAbstratoAnimado().prototipo();
//				String stringValorNewton = controleContainerAnimadoT.getStringValorNewton();
//				forcaTriangular.setStringValorNewton(stringValorNewton);
				//----------------------------------------------------------------
				IncluirForcaDinamica forcaDistr = new IncluirForcaDinamica();
				ForcaDinamica forcaDinamica = forcaDistr.incluirForcaTriangular("cor_forca_distribuida", "cor_variavel_forca_distr_", linha, controleContainerAnimadoT.get90GrausAuxiliar(), controleContainerAnimadoT.getVariavelForca());
				forcaDinamica.setDescricao("forcaDinamicaTriangular");
				
//				ForcaDinamica forcaDinamica = new ForcaDinamica("cor_forca_triangular");
//				forcaDinamica.setLinha(linha);
//				
//				int MULTIPLICADOR = 1;
//				final int COMPRIMENTO_LINHA_P = (int) linha.getComprimento();
//				final int PREF_DISTANCIA_SETA = Util.getInt("pref_distancia_entre_setaT");
//				int QTD_RETAS_ADICIONAR = COMPRIMENTO_LINHA_P / PREF_DISTANCIA_SETA;
//				if(COMPRIMENTO_LINHA_P % PREF_DISTANCIA_SETA != 0) {
//					QTD_RETAS_ADICIONAR++;
//				}
//				final int DISTANCIA_REAL_ENTRE_SETAS = COMPRIMENTO_LINHA_P / QTD_RETAS_ADICIONAR; 
//				Vetor vetorMaior = linha.criarVetor();
//				Vetor vetorMenor = linha.criarVetor();
//				Vetor teste = linha.criarVetor();
//				final int COMPRIMENTO_SETA_MAIOR = Util.getInt("comprimento_seta_dinamica_maior"); 
//				final int COMPRIMENTO_SETA_MENOR = Util.getInt("comprimento_seta_dinamica_menor"); 
//				vetorMaior.alterarTamanho(COMPRIMENTO_SETA_MAIOR);
//				vetorMenor.alterarTamanho(COMPRIMENTO_SETA_MENOR);
//				teste.alterarTamanho(Util.getInt("tamanho_padrao_forca_centralizada"));
//				if(linha.ehVertical() || linha.ehHorizontal()) {
//					if(linha.getPonto2().yMenorQue(linha.getPonto1())) {
//						MULTIPLICADOR = -1;
//					} else if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//						MULTIPLICADOR = -1;
//					}
//				} else {
//					if(linha.getPonto1().yMenorQue(linha.getPonto2())) {
//						if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//							MULTIPLICADOR = -1;
//						}
//					} else {
//						if(linha.getPonto2().xMenorQue(linha.getPonto1())) {
//							MULTIPLICADOR = -1;
//						}
//					}					
//				}
//				
//				final int GRAUS = controleContainerAnimadoT.get90GrausAuxiliar() * MULTIPLICADOR;
//				vetorMaior.rotacionar(GRAUS);
//				vetorMenor.rotacionar(GRAUS);
//				teste.rotacionar(GRAUS);
//				
//				int v_x1 = (int) vetorMaior.x;
//				int v_y1 = (int) vetorMaior.y * -1;				
	//
//				int v_x2 = (int) vetorMenor.x;
//				int v_y2 = (int) vetorMenor.y * -1;				
	//
//				int p_x1 = (int) (linha.getPonto1().getX() + v_x1);
//				int p_y1 = (int) (linha.getPonto1().getY() + v_y1);
//				
//				int p_x2 = (int) (linha.getPonto2().getX() + v_x2);
//				int p_y2 = (int) (linha.getPonto2().getY() + v_y2);
	//
//				Reta retaTriangular = new Reta(p_x1, p_y1, p_x2, p_y2);
//				forcaDinamica.adicionarFilho(retaTriangular);
//				
//				String stringVariavForca = controleContainerAnimadoT.getVariavelForca();
//				Linha linhaVariavelForca = new Linha(new Ponto(p_x1, p_y1), new Ponto(p_x2, p_y2));
//				Vetor vetorVariavelForca = linhaVariavelForca.criarVetor();
//				vetorVariavelForca.alterarTamanho((int) (linhaVariavelForca.getComprimento() / 2));
//				Ponto pontoVariavelForca = new Ponto((int)(linhaVariavelForca.getPonto1().getX() + vetorVariavelForca.x), (int)(linhaVariavelForca.getPonto1().getY() + vetorVariavelForca.y * -1 + 15));
//				
//				Reta reta = new Reta(linha.getPonto1().getX(), linha.getPonto1().getY(), p_x1, p_y1);
//				forcaDinamica.adicionarFilho(reta);
//				Vetor v = reta.criarVetor();
//				v.alterarTamanho(8);
//				v.rotacionar(40);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto1(), v));
//				v.rotacionar(-80);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto1(), v));
//				
//				reta = new Reta(linha.getPonto2().getX(), linha.getPonto2().getY(), p_x2, p_y2);
//				forcaDinamica.adicionarFilho(reta);
//				v = reta.criarVetor();
//				v.alterarTamanho(8);
//				v.rotacionar(40);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto2(), v));
//				v.rotacionar(-80);
//				forcaDinamica.adicionarFilho(new Reta(linha.getPonto2(), v));
	//
//				Linha linhaTriangular = new Linha(new Ponto(p_x1, p_y1), new Ponto(p_x2, p_y2));
//				
//				for(int i=1; i<QTD_RETAS_ADICIONAR; i++) {
//					int tamanho = i * DISTANCIA_REAL_ENTRE_SETAS; 
//					Vetor vetorLinha = linha.criarVetor();
//					vetorLinha.alterarTamanho(tamanho);
//					vetorLinha.y *= -1;				
	//
//					Vetor vetorParalelo = linhaTriangular.criarVetor();
//					vetorParalelo.alterarTamanho(tamanho);
//					vetorParalelo.y *= -1;				
	//
//					reta = new Reta((int)(linha.getPonto1().getX() + vetorLinha.x), 
//							  		(int)(linha.getPonto1().getY() + vetorLinha.y), 						  
//							  		(int)(linhaTriangular.getPonto1().getX() + vetorParalelo.x), 
//							  		(int)(linhaTriangular.getPonto1().getY() + vetorParalelo.y));
//					forcaDinamica.adicionarFilho(reta);
//					v = reta.criarVetor();
//					v.alterarTamanho(8);
//					v.rotacionar(40);
//					forcaDinamica.adicionarFilho(new Reta(	(int)(linha.getPonto1().getX() + vetorLinha.x),
//															(int)(linha.getPonto1().getY() + vetorLinha.y), v));
//					v.rotacionar(-80);
//					forcaDinamica.adicionarFilho(new Reta(	(int)(linha.getPonto1().getX() + vetorLinha.x),
//															(int)(linha.getPonto1().getY() + vetorLinha.y), v));
//				}
//				
//				Vetor vetor = linha.criarVetor();
//				int m = (int) (linha.getComprimento() / 3);
//				vetor.alterarTamanho(m);
//				Ponto ponto = new Ponto((int)(linha.getPonto1().getX() + vetor.x), (int)(linha.getPonto1().getY() + vetor.y * -1));
//				ponto.setPreenchido(true);
//				ponto.setCorFundo(Util.getCor("cor_forca_triangular"));
//				linha.setPontoCentral(ponto);
//				
//				forcaDinamica.setVariavelForca(stringVariavForca);
//				forcaDinamica.setPontoVariavelForca(pontoVariavelForca);
//				forcaDinamica.setCorVariavelForca(Util.getCor("cor_variavel_forca_triang_"));
//				
//				ForcaCentralizada2 forcaC = new ForcaCentralizada2(teste, ponto.getX(), ponto.getY());
//				forcaC.setVariavelForca("" + (int)((m / Constantes.ESCALA_REAL) * Integer.parseInt(stringVariavForca)));
//				forcaC.setCorFundo(Util.getCor("cor_forca_triangular"));
//				linha.setForcaCentralizada2(forcaC);
				
				superficie.adicionarObjeto(forcaDinamica);
				adicionado = true;
			} catch(Exception e) {
				Util.mensagem(this, Util.getString("msg_nao_selecionado_forca_variavel"));
				//JOptionPane.showMessageDialog(null, e.getMessage());
				return;
			}
		}
		if(adicionado) {
			dispose();
		} else {
			Util.mensagem(this, Util.getString("msg_nao_selecionado_forca"));
		}
	}
}